package com.csun.dsms.service;

import com.csun.dsms.comment.core.support.IService;
import com.csun.dsms.model.domain.DsmsUser;
import com.csun.dsms.model.dto.user.ResetPwdDto;
import com.csun.dsms.model.dto.user.UserDto;
import com.csun.dsms.model.dto.user.UserModifyPwdDto;
import com.csun.dsms.model.dto.user.UserQueryDto;
import com.csun.dsms.model.vo.user.UserVo;

import java.util.List;

/**
 * @author chisj chisj@foxmail.com
 * @version 1.0.0
 * @date 2021-08-31 15:24
 * @description: TODO
 */
public interface DsmsUserService extends IService<DsmsUser> {

    /**
     * 根据Id查询用户信息
     *
     * @param id    the user id
     *
     * @return  the user info.
     */
    DsmsUser selectUserById(Long id);

    /**
     * 用户登录
     *
     * @param username  the username
     * @param password  the password
     *
     * @return  the dsms user.
     */
    DsmsUser login(String username, String password);

    /**
     * 查询用户列表.
     *
     * @param userQueryDto  the iser query dto
     *
     * @return  the user vo list.
     */
    List<UserVo> queryListWithPage(UserQueryDto userQueryDto);

    /**
     * 保存用户信息
     *
     * @param userDto   the user dto
     * @param login     the login user
     *
     * @return  the int.
     */
    Integer save(UserDto userDto, DsmsUser login);

    /**
     * 修改用户信息
     *
     * @param userDto   the user dto
     * @param login     the login user
     *
     * @return  the int.
     */
    Integer edit(UserDto userDto, DsmsUser login);

    /**
     * 根据Id修改用户状态
     *
     * @param dsmsUser  the dsms user
     * @param login     the login user
     *
     * @return  the int.
     */
    Integer modifyUserStatusById(DsmsUser dsmsUser, DsmsUser login);

    /**
     * 通过Id删除用户
     *
     * @param userId    the user id
     *
     * @return  the int.
     */
    Integer deleteUserById(Long userId);

    /**
     * 用户修改密码
     *
     * @param userModifyPwdDto  the user modify password dto
     * @param login the login user
     *
     * @return  the int.
     */
    Integer userModifyPwd(UserModifyPwdDto userModifyPwdDto, DsmsUser login);

    /**
     * 重置用户密码
     *
     * @param resetPwdDto   the reset password dto
     * @param login         the login user
     *
     * @return
     */
    Integer resetPwd(ResetPwdDto resetPwdDto, DsmsUser login);

    /**
     * 校验用户名是否存在
     *
     * @param userId	用户Id 排除该用户
     * @param loginName	登录名
     *
     * @return	true-不存在 false-存在
     */
    boolean checkLoginName(Long userId, String loginName);

    /**
     * 校验身份证是否存在
     *
     * @param userId	用户Id 排除该用户
     * @param idCard	身份证
     *
     * @return true-不存在 false-存在
     */
    boolean checkIdCard(Long userId, String idCard);

    /**
     * 校验电话号码是否存在
     *
     * @param userId	用户Id 排除该用户
     * @param mobileNo	电话号码
     *
     * @return true-不存在 false-存在
     */
    boolean checkMobileNo(Long userId, String mobileNo);
}
